// 三行代码，创建express服务器
const express = require("express")
const server = express()

const cors = require('cors')
server.use(cors())
server.use('/uploads',express.static('uploads'))

const jwt = require('express-jwt');
// app.use(jwt().unless());
// jwt() 用于解析token，并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'gz61', // 生成token时的 钥匙，必须统一
  algorithms: ['HS256'] // 必填，加密算法，无需了解
}).unless({
  path: ['/user/login', '/user/register', /^\/uploads\/.*/] // 除了这两个接口，其他都需要认证
}));

// 正则表达式： /^\/uploads\/.*/

// 通过路由中间件来 加载不同的路由
const heroRouter = require('./router/hero_router.js')
const userRouter = require('./router/user_router.js')
server.use('/hero', heroRouter)
server.use('/user', userRouter)

// 错误处理中间件
server.use((err, req, res, next) => {
  console.log('有错误', err)
  if (err.name === 'UnauthorizedError') {
    // res.status(401).send('invalid token...');
    res.status(401).send({ code: 1, message: '身份认证失败！' });
  }
});

server.listen(3000, () => {
  console.log("您的服务器已经在3000端口就绪了");
})